home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World Komputer 2010 April
/
PCWorld0410.iso
/
hity wydania
/
Ubuntu 9.10 PL
/
karmelkowy-koliberek-desktop-9.10-i386-PL.iso
/
casper
/
filesystem.squashfs
/
lib
/
udev
/
hdparm
< prev
next >
Wrap
Text File
|
2009-10-06
|
6KB
|
258 lines
#!/bin/sh
set -e
[ "$DEVNAME" ] || exit 1
if [ -e /proc/cmdline ]; then #linux only - future proofing against BSD and Hurd :)
if grep -wq "nohdparm" /proc/cmdline ; then
exit 0
fi
fi
raidstat=OK
if [ -e /proc/mdstat ]; then
if egrep -iq "resync|repair|recover|check" /proc/mdstat; then
raidstat=RESYNC
fi
elif [ -e /proc/rd/status ]; then
raidstat=`cat /proc/rd/status`
fi
if ! [ "$raidstat" = 'OK' ]; then
exit 1
fi
isOnBattery() {
on_ac_power 2>/dev/null
[ $? -eq 1 ]
}
set_option()
{
if test -n "$DISC"; then
NEW_OPT=
for i in $OPTIONS; do
if test x${i%${i#??}} != x${1%${1#??}}; then
NEW_OPT="$NEW_OPT $i"
else
NEW_OPT=${NEW_OPT%-q}
fi
done
OPTIONS="$NEW_OPT $OPT_QUIET $1"
else
NEW_DEF=
for i in $DEFAULT; do
if test x${i%${i#??}} != x${1%${1#??}}; then
NEW_DEF="$NEW_DEF $i"
else
NEW_DEF=${NEW_DEF%-q}
fi
done
DEFAULT="$NEW_DEF $DEF_QUIET $1"
fi
}
eval_value()
{
case $1 in
off|0)
set_option "$2"0
;;
on|1)
set_option "$2"1
;;
*)
log_failure_msg "Unknown Value for $2: $1"
exit 1
;;
esac
}
WAS_RUN=0
# Get blocks as far as the drive's write cache.
/bin/sync
DISC=
DEFAULT=
OPTIONS=
DEF_QUIET=
OPT_QUIET=
egrep -v '^[[:space:]]*(#|$)' /etc/hdparm.conf |
{
while read KEY SEP VALUE; do
if [ "$NEXT_LINE" != 'go' ]; then
case $SEP in
'{')
case $KEY in
command_line)
NEXT_LINE=go
unset DISC
unset OPTIONS
unset OPT_QUIET
IN_BLOCK=0
;;
*)
DISC=$KEY
OPTIONS=$DEFAULT
OPT_QUIET=$DEF_QUIET
WAS_RUN=0
if [ "$DISC" = "$DEVNAME" ]; then
IN_BLOCK=1
else
IN_BLOCK=0
fi
;;
esac
;;
=)
case $KEY in
read_ahead_sect)
set_option -a$VALUE
;;
lookahead)
eval_value $VALUE -A
;;
bus)
eval_value $VALUE -b
;;
apm)
if ! isOnBattery; then
set_option -B$VALUE
fi
;;
apm_battery)
if isOnBattery; then
set_option -B$VALUE
fi
;;
io32_support)
set_option -c$VALUE
;;
dma)
eval_value $VALUE -d
;;
defect_mana)
eval_value $VALUE -D
;;
cd_speed)
set_option -E$VALUE
;;
mult_sect_io)
set_option -m$VALUE
;;
prefetch_sect)
set_option -P$VALUE
;;
read_only)
eval_value $VALUE -r
;;
spindown_time)
set_option -S$VALUE
;;
poweron_standby)
eval_value $VALUE -s
;;
interrupt_unmask)
eval_value $VALUE -u
;;
write_cache)
eval_value $VALUE -W
;;
transfer_mode)
set_option -X$VALUE
;;
acoustic_management)
set_option -M$VALUE
;;
keep_settings_over_reset)
eval_value $VALUE -k
;;
keep_features_over_reset)
eval_value $VALUE -K
;;
chipset_pio_mode)
set_option -p$VALUE
;;
security_unlock)
set_option --security-unlock $VALUE
;;
security_pass)
set_option --security-set-pass $VALUE
;;
security_disable)
set_option --security-disable $VALUE
;;
user-master)
set_option --user-master $VALUE
;;
security_mode)
set_option --security-mode $VALUE
;;
ROOTFS)
ROOTFS=$VALUE
;;
*)
echo "Unknown option $KEY"
exit 1
;;
esac
;;
"")
case $KEY in
'}')
if [ -z "$DISC" ] && [ "$WAS_RUN" != '1' ]; then
echo "No disk enabled. Exiting"
exit 1
fi
if [ -n "$OPTIONS" ] && [ -b "$DISC" ]; then
ret=0
if [ "$IN_BLOCK" = 1 ]; then
# Flush the drive's internal write cache to the disk.
/sbin/hdparm -q -f $DISC 2>/dev/null || ret=$?
/sbin/hdparm $OPTIONS $DISC 2>/dev/null || ret=$?
fi
fi
;;
quiet)
if [ -n "$DISC" ]; then
OPT_QUIET=-q
else
DEF_QUIET=-q
fi
;;
standby)
set_option -y
;;
sleep)
set_option -Y
;;
disable_seagate)
set_option -Z
;;
security_freeze)
set_option --security-freeze
;;
*)
echo "unknown option $KEY"
exit 1
;;
esac
;;
*)
echo "unknown separator $SEP"
exit 1
;;
esac
else
$KEY $SEP $VALUE
NEXT_LINE=no-go
WAS_RUN=1
fi
done
}
exit 0